package utils.path;

import utils.test.Assert;

/**
 *  现有三种读取策略
 *  FileSystemConfigPath、ClassConfigPath、WebContextConfigPath
 * @author Administrator
 *
 */
public abstract class ConfigPath{
	
	/**
	 * 配置文件路径
	 */
	protected String[] locations;
	
	/**
	 * 资源路径数组
	 * @param locations
	 */
	public ConfigPath(String[] locations) {
		processDefaultConfigPath(locations);
		processConfigPath();
	}
	
	/**
	 * 资源路径字符串
	 * @param locations
	 */
	public ConfigPath(String locations){
		processDefaultConfigPath(locations);
		processConfigPath();
	}
	
	
	/**
	 * 返回配置路径
	 * @return
	 */
	public String[] getLocation(){
		return this.locations;
	}
	
	/**
	 * 传入配置文件路径字符串，返回分隔后的配置文件数组
	 * @param locations
	 * @return
	 */
	public String[] processDefaultConfigPath(String locations){
		return processDefaultConfigPath(locations, ",");
	}
	
	/**
	 * 传入配置文件路径数组，返回配置文件数组
	 * @param locations
	 * @return
	 */
	public String[] processDefaultConfigPath(String[] locations){
		Assert.isNotNull(locations, "配置文件不能为空");
		this.locations = locations;
		return locations;
	}
	
	/**
	 * 传入配置文件路径字符串，及分隔标记，返回分隔后的配置文件数组
	 * @param locations
	 * @return
	 */
	public String[] processDefaultConfigPath(String locations,String prex){
		Assert.isNotNull(locations, "配置文件不能为空");
		Assert.isNotNull(prex, "分隔标记不能为空");
		String[] locationsArray = locations.split(prex);
		this.locations = locationsArray;
		return locationsArray;
	}
	
	/**
	 * 路径处理方式交给子类实现
	 * @return
	 */
	public abstract String[] processConfigPath();
}
